/*
 * Copyright 2018 the original author or authors.
 * 
 * you can use the file or import project.but Do not take legal responsibility.
 * Only for learning communication.
 *
 * Java compiled version 1.8 or higher
 * 
 * 
 * 
 * 
 */

package org.liang.downimage.core;

import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.stream.Collectors;

import org.liang.downimage.config.AppConfig;
import org.liang.downimage.util.UrlUtil;

/**
 * 
 * 下载图片入口
 * @author houliang
 * @date 2018年1月27日
 */
public class DownHtml {

	/**保存已经访问过的搜索地址*/
	public static Queue<String> visitedUrls = new LinkedList<String>();
	/**保存未访问过的搜索地址*/
	private static Queue<String> unVisiUrls =  new LinkedList<String>();
	private static int CONT_NUM = 0;//统计处理网页数量
	
	/**
	 * 后台图片下载下载入口<br/>
	 * 使用需要先配置，实例
	 * <pre>
	 *AppConfig.searchUrl="http://www.27270.com/";//搜索图片网络地址
	 *AppConfig.savePath="c://images";//保存本地目录   
	 *AppConfig.pageDepth=2;//抓取的网络链接数量，不是图片地址，是搜索地址
	 *AppConfig.threadNum=2;//启动线程数
	 *
	 *List<String> types = new ArrayList<String>();
	 *types.add("jpg");
	 *AppConfig.imgTypeList=types;
	 *
	 *DownHtml.startDeal();
	 * </pre>
	 */
	public static void startDeal() {
		//清空初始化
		CONT_NUM=0;//初始化统计数量
		unVisiUrls.clear();
		
		String url = AppConfig.searchUrl;
		unVisiUrls.offer(url);
		dealHtml();
	}
	
	/*
	 * 根据网络地址，递归 获取搜索地址 
	 */
	private static void dealHtml() {
		
		if(CONT_NUM > AppConfig.pageDepth) {
			return;
		}
		
		CONT_NUM++;
		String newUrl = unVisiUrls.poll();
		//是否处理过，如果已经处理过，不在处理
		boolean isDeal = visitedUrls.stream().anyMatch(s -> s==null || s.equals(newUrl));
		if(!isDeal) {
			visitedUrls.offer(newUrl);
			SearchImage.downImage(newUrl);//下载图片
			List<String> ps = UrlUtil.getUrl(newUrl);
			ps = ps.stream()
					.filter(s -> s!=null && !"".equals(s))
					.collect(Collectors.toList());//过滤链接
			if(ps !=null && ps.size() > 0) {
				unVisiUrls.addAll(ps);
			}
			dealHtml();
		}
	}
	
}
